package com.xoomworks.rsfr.core.service;

import java.util.List;

import com.xoomworks.rsfr.model.Notification;
import com.xoomworks.rsfr.model.Requirement;
import com.xoomworks.rsfr.model.Resource;
import com.xoomworks.rsfr.model.TrainingSession;
import com.xoomworks.rsfr.model.TrustedCompany;

/**
 * * ExpertiseLevel service interface.
 *
 * @author bogdan.sbiera
 */
public interface NotificationService extends BaseService<Notification> {

    /**
     * Gets all notifications by id.
     *
     * @param id
     *            id of the company
     * @return List of Notification for the company with the given id. Empty
     *         List if there are no notifications or if there is no company with
     *         the id.
     */
    public List<Notification> getByCompanyId(Long id);

    // /**
    // * @return
    // */
    // public List<Notification> findAllForAuthenticatedUser();

    /**
     * Gets all notifications by the company of the authenticated user.
     * @return List of Notification for the company of the authenticated user. Empty
     *         List if there are no notifications or if there is no company with
     *         the id.
     */
    public List<Notification> getByAuthUserCompany();

    /**
     * Creates a notification indicating that a new TrustedCompany object has
     * been created (aka a trusted company requst was sent).
     *
     * @param tc
     *            the TrustedCompany for which we create the notification
     */
    public void createTrustedCompanyNotification(TrustedCompany tc);

    // public Notification getByTrustedCompanyId(Long id);

    /**
     * Creates a notification indicating that a new Requirement object has been
     * created.
     *
     * @param req
     *            the Requirement for which we create the notification
     */
    public void createRequirementNotification(Requirement req);

    // public Notification getByRequirementId(Long id);

    /**
     * Creates a notification indicating that a new Resource object has been
     * created.
     *
     * @param res
     *            the Resource for which we create the notification
     */
    public void createResourceNotification(Resource res);

    // public Notification getByResourceId(Long id);

    /**
     * Creates a notification indicating that a new TrainingSession object has
     * been created.
     *
     * @param ts
     *            the TrainingSession for which we create the notification
     */
    public void createTrainingSessionNotification(TrainingSession ts);

    // public Notification getByTrainingSessionId(Long id);
}
